package com.upcode.weighing.redisson.service;

import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;

import java.util.concurrent.TimeUnit;


public interface DistributedLocker {
    /**
     * 加锁
     * @param lockKey 锁名称
     * @return
     */
    RLock lock(String lockKey);

    /**
     * 加锁
     * @param lockKey 锁名称
     * @param timeout 锁有效时间
     * @return
     */
    RLock lock(String lockKey, int timeout);

    /**
     * 加锁
     * @param lockKey 锁名称
     * @param unit 时间单位
     * @param timeout 锁有效时间
     * @return
     */
    RLock lock(String lockKey, TimeUnit unit, int timeout);

    /**
     * 尝试性加锁
     * @param lockKey 锁名称
     * @param unit 时间单位
     * @param waitTime 等待时间
     * @param leaseTime 续租时间
     * @return
     */
    boolean tryLock(String lockKey, TimeUnit unit, int waitTime, int leaseTime);

    /**
     * 根据锁名称解锁
     * @param lockKey
     */
    void unlock(String lockKey);

    /**
     * 根据锁对象解锁
     * @param lock
     */
    void unlock(RLock lock);

    /**
     * 设置RedissonClient
     * @param redissonClient
     */
    void setRedissonClient(RedissonClient redissonClient);
}
